home *** CD-ROM | disk | FTP | other *** search
/ Nothing but Tetris / Nothing but Tetris.iso / amiga / speccy_tetris / spectrum.doc < prev    next >
Text File  |  2000-01-01  |  53KB  |  1,119 lines

  1.  
  2.  
  3.                            Sinclair ZX Spectrum Emulator V2.0+
  4.                            ----------------------------------
  5.  
  6.                                     7/7/94
  7.  
  8.  
  9. This program emulates a Sinclair ZX Spectrum 48-kbyte z80-based computer on
  10. any Amiga computer.
  11.  
  12. The files in this archive may be distributed anywhere provided they are
  13. unmodified and are not sold for profit.
  14.  
  15. The file Spectrum.rom contains an image of the Spectrum's ROM and it is
  16. copyright to Amstrad.  Cliff Lawson of Amstrad (CompuServe 75300,1517) has
  17. given special permission for emulator authors to use the Spectrum's ROM code.
  18.  
  19. I have gone to a lot of trouble to make sure that the emulator runs on all
  20. amigas (from OS 1.2), so please don't compress the files with an old version
  21. of PowerPacker or Imploder, for example, which would render the emulator
  22. useless on a 68040 system.
  23.  
  24. Ownership and copyright of all files except Spectrum.rom remains with the
  25. author:
  26.  
  27.                 Peter McGavin, 86 Totara Crescent, Lower Hutt, New Zealand.
  28.                 e-mail: peterm@maths.grace.cri.nz
  29.  
  30.  
  31. Spectrum-00 is an executable for 68000-based Amigas only.
  32.  
  33. Spectrum-10 is for 68010-based Amigas, but also works on higher processors.
  34.  
  35. Spectrum-20 is optimised for 68020/30/40...-based Amigas with fast memory.
  36.  
  37. Spectrum-00-special is for 68000-based Amigas.  It is faster and dangerous.
  38.  
  39.  
  40. The Spectrum-00-special version takes some shortcuts to get some extra speed.
  41. Some games will run up to 2 times faster in Spectrum-00-special than in
  42. Spectrum-00, but because of the shortcuts, not all programs will work.  In
  43. the special version:
  44.  
  45.                 o  Self-modifying z80 code does not work at all.  This affects some
  46.                                 games.  It also means that you will only be able to run one
  47.                                 program and then quit.  If you try to load a second Spectrum
  48.                                 program, without quitting Spectrum-00-special and re-running
  49.                                 it first, it very probably won't work.
  50.  
  51.                 o  Code is optimised for faster animated graphics and scrolling, at
  52.                                 the expense of speed when the display is static, so you will
  53.                                 get faster animated games and slower ray-tracing  :-)
  54.  
  55.                 o  The ROM is unprotected.  Note that the standard Spectrum ROM
  56.                                 corrupts itself.  In particular, location 0 usually gets
  57.                                 overwritten very quickly, so that RANDOMIZE USR 0 does not
  58.                                 work any more.
  59.  
  60. Do not try to develop or write Spectrum programs with Spectrum-00-special,
  61. because you will probably lose your work.  It is provided only because it is
  62. significantly faster for running some animated Spectrum games.
  63.  
  64. The emulator uses the dreaded move-sr instruction after almost every z80
  65. instruction emulated.  It ran 30-40% slower when I tried replacing the
  66. move-sr instruction with a call to GetCC()!  This is quite exceptional ---
  67. with most programs you wouldn't notice the difference.  Therefore I have
  68. supplied a 68010 version which uses move-ccr instead of move-sr.
  69.  
  70. The Spectrum-20 version uses 68020 addressing modes which are not available
  71. on lower processors.
  72.  
  73. I developed the code, entirely in assembler, in my spare time using z80
  74. emulation code based (originally) on Ulf Nordquist's CP/M emulator (Fred Fish
  75. disk 165).  I have fixed several bugs in the z80 emulation code, and made it
  76. more than twice as fast, but there are still some (very hard to find) bugs.
  77.  
  78.  
  79. Features:
  80. ---------
  81.  
  82. The following Spectrum features are implemented:
  83.  
  84.                 screen output in the same resolution and colours as a real Spectrum
  85.                                 --- includes bright, reverse and flash attributes, and border
  86.                                 colour (looks much better than the old TV!)
  87.  
  88.                 keyboard implemented at the z80 "in" instruction level.  Note that
  89.                                 like a real Spectrum you have to hold the key down until it
  90.                                 registers.  Because the emulator is running slower, you might
  91.                                 have to hold keys down longer.  More often, you might have to
  92.                                 hold your fingers off the keyboard for longer.  Make sure the
  93.                                 Spectrum window is active when you start to type.  See
  94.                                 Appendix 1 for key map.
  95.  
  96.                 kempston joystick implemented at the Z80 "in" instruction level.  This
  97.                                 uses the rear Amiga gameport.  Note that the joystick is
  98.                                 active only when the Spectrum window is active.  If another
  99.                                 Amiga program is currently using the joystick, you will get a
  100.                                 retry/no-joystick requester.
  101.  
  102.                 sound implemented using 2 techniques.  Calls to the "beeper" routine
  103.                                 at $03b5 in the Spectrum rom are trapped and the sound is
  104.                                 emulated at the exact same frequency and duration.  Sound is
  105.                                 also reproduced when a Spectrum program outputs to z80 port
  106.                                 254.  In this case the pitch and duration may or may not
  107.                                 sound correct, depending on the Spectrum program and the speed
  108.                                 of the Amiga you are using.
  109.  
  110.                 cassette tape loading, if you have a sound sampler capable of at least
  111.                                 20 kHz sampling rate attached to your parallel port.  This is
  112.                                 implemented by trapping calls to the "ld-bytes" routine at
  113.                                 $056b in the Spectrum rom.  Note that copy-protected games
  114.                                 with custom loaders cannot always be loaded this way.
  115.  
  116. It is possible to save to and load from amiga disk files.
  117.  
  118.  
  119.  
  120. Operation:
  121. ----------
  122.  
  123. You can start the emulator from either the Workbench or SHELL (or CLI).
  124.  
  125. If you use the SHELL (or CLI), Spectrum.rom must be in the current directory.
  126. You can specify the name of a snapshot file as a parameter and then the
  127. snapshot will be loaded automatically.
  128.  
  129. From the workbench, Spectrum.rom should be in the same directory as the
  130. program.  You can create project icons for your snapshots (e.g, with
  131. IconEdit), so you can have an icon for ManicMiner for example, but currently
  132. the emulator does not create its own icons.
  133.  
  134. If the emulator can't find Spectrum.rom, then it will display a requester
  135. saying so, and it will not run.
  136.  
  137. Under AmigaOS 2.x and up the emulator uses the ASL file requester.  This is
  138. not available in earlier operating systems (e.g, 1.3), so in those
  139. circumstances the emulator tries to use the ARP file requester instead.
  140. If neither asl.library nor arp.library is available (in your LIBS: directory)
  141. then you cannot load or save disk files in the emulator.
  142.  
  143. The emulator runs in its own custom screen and window.
  144.  
  145. The emulator does not disable multitasking, and it does not interfere with
  146. other tasks (except when loading from a sound sampler).  You can drag the
  147. screen down or click it to the back with the mouse, in the usual way.
  148.  
  149. The emulator lowers its own priority to -5, otherwise it would significantly
  150. slow down other tasks.  Raising the priority back to 0 does not significantly
  151. speed up the emulator on a standard system.  Raising it higher prevents most
  152. other tasks from running at all.  You can change the emulator's priority from
  153. the menus.
  154.  
  155. To exit the emulator, do either of the following:
  156.  
  157.                 o  select "Quit..." from the Project menu, or
  158.  
  159.                 o  press the ESC key.
  160.  
  161.  
  162.  
  163. Menus:
  164. ------
  165.  
  166. Project menu
  167.  
  168.     Reset...
  169.                 Resets the z80, unless you cancel the requester that pops up.
  170.                 This is like the Spectrum NEW command, but it works even when you
  171.                 are running an "unbreakable" or "crashed" program.
  172.  
  173.     Load snapshot...  F1
  174.  
  175.                 Loads a disk file that has been created with "Save snapshot",
  176.                 restoring the state of the system to what it was when the snapshot
  177.                 was made.  Any currently loaded Spectrum program is lost.
  178.  
  179.                 You can use "Load snapshot..." even if the Spectrum has "crashed",
  180.                 or if you are running a Spectrum program which does not have a
  181.                 "quit" option.
  182.  
  183.     Save snapshot...  F2
  184.  
  185.                 Saves the current state of the emulator to a disk file.  The entire
  186.                 state of the system is saved, including all 48 kbytes of Spectrum ram
  187.                 and the state of the z80 processor.
  188.  
  189.                 The format of a snapshot file is listed in Appendix 2.
  190.  
  191.     Help...         HELP
  192.  
  193.                 Displays the "Spectrum.help" file, which is a diagram of a real
  194.                 Spectrum keyboard.  You need about 70 kb of CHIP ram free for this.
  195.  
  196.     Quit...          ESC
  197.  
  198.                 Quits the emulator.  (You get a chance to change your mind.)
  199.  
  200.  
  201. Settings menu
  202.  
  203.     LOAD/MERGE/VERIFY...
  204.  
  205.                 Selects what happens when the emulator executes a Spectrum BASIC
  206.                 LOAD, MERGE or VERIFY command.
  207.  
  208.                 Note that this has nothing at all to do with "Load snapshot", which
  209.                 always loads from disk.  What it does do, is to change the behaviour
  210.                 of the standard Spectrum BASIC tape loading commands, which are
  211.                 normally used to load, merge and verify BASIC programs, array data
  212.                 and binary code, from cassette tape.
  213.  
  214.                 In fact, this selects what happens when any program (including any
  215.                 machine code program) calls the cassette tape loading routine in the
  216.                 Spectrum rom.
  217.  
  218.                 You have a choice of:
  219.  
  220.                     Disk files
  221.  
  222.                                 Select a disk file using a file requester.  The data in the
  223.                                 file is interpreted as if it is being read from cassette tape.
  224.  
  225.                                 The first byte in the file is the "header" byte, then the raw
  226.                                 data, then the checksum byte.
  227.  
  228.                                 The Spectrum normally reads 2 blocks of data from cassette
  229.                                 tape, a "header" file followed by the "data" file.  These
  230.                                 should be stored in 2 separate disk files.  The emulator will
  231.                                 request both files.  I implemented it this way to allow support
  232.                                 for "headerless" files which are used by many Spectrum machine
  233.                                 code programs.
  234.  
  235.                                 Note that the Spectrum still thinks it is reading from cassette
  236.                                 tape, so you might see messages like "Start tape now", even
  237.                                 though it is reading from disk.
  238.  
  239.                                 If the file you select is not in the correct format, or if the
  240.                                 checksum is wrong, the Spectrum will usually just request the
  241.                                 same file again, without any messages, as if it read garbage
  242.                                 noise from cassette tape.
  243.  
  244.                     ProSound
  245.  
  246.                                 Read data from a ProSound sound sampler connected to the
  247.                                 parallel port.
  248.  
  249.                     Rombo
  250.  
  251.                                 Read data from a Rombo sound sampler connected to the parallel
  252.                                 port (the sampler that comes with MegaMIX Master software).
  253.                                 Please note that this option is untested.
  254.  
  255.                     Other sampler
  256.  
  257.                                 Read data from any other kind of sound sampler connected to the
  258.                                 parallel port.
  259.  
  260.                                 The sampler must be capable of at least 20 kHz sampling rate
  261.                                 and it must be connected to the parallel port (not the game
  262.                                 port).
  263.  
  264.                                 You should be able to feed standard Spectrum cassette tapes in.
  265.  
  266.                                 Some copy-protected programs have custom loaders that will not
  267.                                 work in the emulator.
  268.  
  269.                                 It is possible to connect the Spectrum EAR output to the sound
  270.                                 sampler to transfer data directly from your Spectrum.  (Use a
  271.                                 SAVE command at one end, and a LOAD at the other.)
  272.  
  273.                                 Important: Interrupts on the amiga are disabled while you are
  274.                                 loading from a sound sampler.  This will interfere with other
  275.                                 tasks.  For example, a file transfer running in the background
  276.                                 will probably fail.  Please make certain that no other tasks
  277.                                 are writing to disk at the instant you start sampling!
  278.  
  279.                                 It seems as if the whole amiga has frozen while interrupts are
  280.                                 disabled.  To restore control, click the left mouse button.
  281.  
  282.     SAVE...
  283.  
  284.                 Selects what happens when the emulator executes a Spectrum BASIC
  285.                 SAVE command.
  286.  
  287.                 Note that this has nothing at all to do with "Save snapshot", which
  288.                 always saves to disk.  What it does do, is to change the behaviour
  289.                 of the standard Spectrum BASIC SAVE commands, which are normally used
  290.                 to save BASIC programs, array data and binary code, to cassette tape.
  291.  
  292.                 In fact, this selects what happens when any program (including any
  293.                 machine code program) calls the cassette tape saving routine in the
  294.                 Spectrum rom.
  295.  
  296.                 You have a choice of:
  297.  
  298.                     Disk files
  299.  
  300.                                 Select a disk file using a file requester.  The data that
  301.                                 would normally be written to cassette tape is written to the
  302.                                 selected file instead.
  303.  
  304.                                 The first byte in the file is the "header" byte, then the raw
  305.                                 data, then a checksum byte.
  306.  
  307.                                 The Spectrum normally writes 2 blocks of data to cassette
  308.                                 tape, a "header" file followed by the "data" file.  These
  309.                                 should be stored in 2 separate disk files.  The emulator will
  310.                                 request both files.  I implemented it this way to allow support
  311.                                 for "headerless" files which are used by many Spectrum machine
  312.                                 code programs.
  313.  
  314.                                 Note that the Spectrum still thinks it is writing to cassette
  315.                                 tape, so you might see messages like "Start tape, then press
  316.                                 any key".
  317.  
  318.                     Audio
  319.  
  320.                                 Save to audio to be recorded on to cassette tape to be loaded
  321.                                 back on a real Spectrum.
  322.  
  323.                                 WARNING:
  324.                                 I have had a lot of trouble with this option (so I disabled it
  325.                                 in earlier versions) and so far have not been able to load
  326.                                 back anything I have ever saved, even though the noise sounds
  327.                                 right and the code looks right.  Maybe you will have better
  328.                                 luck than me, but my guess is that there is something
  329.                                 seriously wrong and that it will not work for anybody.
  330.  
  331.                                 Sorry there is no way to break into a save to audio in
  332.                                 progress --- you have to wait until it has finished.  The
  333.                                 amiga continues to multitask, however.
  334.  
  335.  
  336.     Audio Volume...
  337.  
  338.                 Lets you choose the sound volume from one of:
  339.  
  340.                                 Off
  341.                                 Quiet
  342.                                 Normal (default)
  343.                                 Loud
  344.  
  345.  
  346.     Titlebar...
  347.  
  348.                 Lets you turn the screen titlebar on and off.
  349.  
  350.  
  351.     Task Priority
  352.  
  353.                 Lets you choose the priority of the Spectrum task from one of:
  354.  
  355.                                 -10             Lowest priority
  356.                                  -5             The default (and the recommended value)
  357.                                   0             Same as most programs
  358.                                   1             Same as workbench
  359.                                   2
  360.                                   5             Highest priority
  361.  
  362.                 If you really want a priority that's not on the list, use one of the
  363.                 public domain system monitor programs like xoper or ARTM.  But be
  364.                 careful --- you can lock up your system if you set it to 10 or more,
  365.                 because that is ahead of input devices or Intuition which the emulator
  366.                 relies on.
  367.  
  368.                 In most circumstances changing the emulator's priority does not
  369.                 significantly affect the speed of the emulator.  But because the
  370.                 emulator is a CPU hog (i.e, it does not normally Wait() because it is
  371.                 continuously busy emulating Z80 instructions), raising its priority
  372.                 will slow down or stop other tasks.
  373.  
  374.  
  375. More on Reading Cassette Tapes:
  376. -------------------------------
  377.  
  378. To load a cassette tape through your sound sampler, first select your sampler
  379. type in the Settings menu, then enter LOAD "" (that is, J followed by ALT/P
  380. twice, then RETURN).  Now start the cassette tape playing into your sound
  381. sampler.  If it is working, the screen border should flash colours, very much
  382. like your Spectrum, and the mouse pointer will be frozen.
  383.  
  384. The MERGE and VERIFY commands should also work, as should things like
  385. LOAD "" CODE, etc.
  386.  
  387. The border of the screen flashes different colours, exactly like a real
  388. Spectrum.  The colours mean:
  389.  
  390.                 flashing yellow and blue:       the load is working
  391.                 flashing red and white:                         synchronising or not working
  392.                 not flashing:                                   not working or tape not playing
  393.  
  394. If it doesn't work, try adjusting the volume and tone controls on the tape
  395. recorder.  If you have trouble, try adjusting the controls while sampling
  396. with software that came with your sampler.  Ideally, the input should be a
  397. square wave which fills the graphic display.  I found it necessary to have
  398. the volume control much lower than when using a real Spectrum, but it
  399. probably varies, depending on the sampler type.
  400.  
  401. You should be able to save directly from your Spectrum to the Amiga with a
  402. direct connection --- i.e, no cassette tape or recorder at all.  Use a SAVE
  403. command on the Spectrum and a corresponding LOAD command in the emulator.
  404.  
  405. Loading works by intercepting calls to the LD-BYTES routine at location
  406. $056b in the Spectrum ROM.  If a Spectrum program has its own loading
  407. routine, then it won't work.  Some copy-protected games and fast-loaders
  408. are like that, and they will not work.  On the other hand, some Spectrum
  409. programs call LD-BYTES to load headerless tape files.  Those programs
  410. should work fine.
  411.  
  412. If you have been using the parallel port recently (for printing or ParNet
  413. for example), you might get a requester asking you to please free up the
  414. parallel port.  Try shutting down the program that has allocated it.
  415.  
  416. The following sound samplers should be suitable, but I have not had the
  417. opportunity to test any except the first:
  418.  
  419.                 o ProSound
  420.  
  421.                 o Rombo (the one that comes with MegaMIX Master)
  422.  
  423.                 o Perfect Sound (except that recent Perfect Sound samplers are
  424.                                 different from early versions and recent ones might not work)
  425.  
  426.                 o Datel DSS
  427.  
  428.                 o Future Sound
  429.  
  430. Documentation on how various samplers work seems to be hard to obtain.
  431. They all seem to be slightly different, especially the way stereo/mono
  432. modes are switched and different channels are selected.
  433.  
  434. For the technically minded, here are the cia register settings currently
  435. used by the loader:
  436.                                                                 ProSound        Rombo                           Other
  437.                 setup ciab-ddra                 4                               7                               6
  438.                 setup ciab-pra                  4,0 or none *   6                               4
  439.                 inter-sample ciab-pra           4,0,4,0                         none                            none
  440.                 ciaa-prb input bias             $80                             $80                             $80
  441.  
  442.                 * If bit 0 of ciab-pra is 0 then output 4 followed by 0 else none.
  443.  
  444. Note that the tape-loading routine disables interrupts for the whole time
  445. it takes to load a tape.  That greatly exceeds Commodore's recommended
  446. limit of 250 microseconds.  While interrupts are disabled, the mouse
  447. pointer freezes, the keyboard is locked out, all other tasks stop, and any
  448. data arriving at the serial port is lost.
  449.  
  450. Please make sure your disks are not busy when you start to load a tape.
  451. Especially make certain that no other program is writing to your hard disk!
  452.  
  453. If I knew another way to make it work, I'd do it that way.  As far as I am
  454. aware, all sound sampling software on the Amiga disables interrupts for
  455. excessive periods.  The Spectrum loader has to interpret the incoming data
  456. in real time, which is quite a lot more than just saving it to a buffer in
  457. memory.
  458.  
  459. To break out of the load routine without actually loading anything, press
  460. the left mouse button.  The Spectrum BREAK key (SHIFT/SPACE) won't work in
  461. this situation.
  462.  
  463. The load routine is based on code kindly provided by Kristian Nielson.
  464. It has been tested on both standard and accelerated amigas.
  465.  
  466.  
  467. General Notes:
  468. --------------
  469.  
  470. o   The emulator runs about 2 to 8 times slower than a real Spectrum, on a
  471.     standard 68000-based A500.  If you are the lucky owner of an Amiga 3000,
  472.     the emulator runs faster than a real Spectrum, but make certain it's
  473.     running out of FAST ram.  If you run it out of CHIP ram, then it's more
  474.     than twice as slow.  I'm afraid the 68000 doesn't have a built-in z80
  475.     emulation mode, and a 3.5 MHz z80 is much harder to emulate than a 6502
  476.     as used in the Commodore 64 and BBC microcomputers.  The Spectrum NEW
  477.     command takes 9.7 seconds on an A500, compared with about 2.0 seconds on
  478.     a real Spectrum, 1.8 seconds on an A3000 (in FAST static-column ram), and
  479.     1.6 seconds on a 33MHz Mega-Midget-Racer with 32-bit ram.  One person
  480.     reported to me that it runs about 3 times faster again on a 68040.
  481.     Several people have told me that some games run too fast on an A1200!
  482.  
  483.  
  484. o   This version of Spectrum uses the blitter to refresh the screen in
  485.     parallel with the emulator.  That is, it uses multi-processing.  Thus,
  486.     the overhead of a z80 instruction writing to the Spectrum's display file
  487.     is minimised.  Before you A3000 owners complain that the 68030 is faster
  488.     than the blitter for blitting, remember that while the blitter is
  489.     refreshing the screen, the 68030 is busy emulating the z80.  The program
  490.     uses QBlit() for concurrency, not OwnBlitter() which would block the z80
  491.     emulator.
  492.  
  493.  
  494. o   I've just about run out of ideas on how to significantly speed up the
  495.     code from what it is now.  One thought is to code some common ROM routines
  496.     in pure 68000.  Obvious candidates are the text output, scrolling, and
  497.     maskable interrupt routines.  Of course this would only speed up programs
  498.     that call the ROM, which excludes most games.  Also, It would probably be
  499.     illegal.  The major speed bottleneck used to be the z80 instruction
  500.     decode.  I've pretty well eliminated that by going to threaded code.  The
  501.     display routines are about as fast as I can get them.  Taking over the
  502.     machine and doing everything at the hardware level would probably give
  503.     only a slight speed improvement, and the program would become much less
  504.     friendly and less portable.
  505.  
  506.  
  507. o   The emulator calls CopyMem() and CopyMemQuick() in several places.  You
  508.     may or may not achieve a speedup by installing the Public Domain
  509.     CopyMemQuicker patch by Arthur Hagen, depending on your configuration.
  510.     (I found CopyMemQuicker available for ftp on amiga.physik.unizh.ch and
  511.     ftp.etsu.edu.)
  512.  
  513.  
  514. o   In version 1.7, the following Spectrum features are NOT implemented yet:
  515.  
  516.                 bank roms (e.g, Interface 1);
  517.  
  518.                 printing to a printer
  519.  
  520.  
  521. o   The following z80 features are NOT properly implemented:
  522.  
  523.                 the z80 h processor flag;
  524.  
  525.                 the z80 daa instruction (decimal adjust a) --- daa works properly only
  526.                                 immediately after add, sub, adc or sbc.  A few games use daa
  527.                                 in the scoring routine and might fail because of this.
  528.  
  529.                 undocumented condition code flags do not necessarily behave the same
  530.                                 as on a real Z80.  Some programs probably fail because of this.
  531.  
  532.                 the timer interrupt occurs after every 1500 branch, jump, call and
  533.                                 return z80 machine instructions, instead of every 20 ms.  On
  534.                                 accelerated amigas, interrupts will not occur any faster than
  535.                                 every 20 ms.
  536.  
  537.                 updating of the flash attribute occurs every 24000 branch, jump, call
  538.                                 and return z80 instructions, instead of every 320 ms.  On
  539.                                 accelerated amigas, the flash speed will never be faster than
  540.                                 every 320 ms.
  541.  
  542.                 interrupts and screen updates can occur only immediately after branch,
  543.                                 jump, call, return and halt z80 machine instructions.
  544.  
  545.                 because the emulator is not real-time, the real interval between timer
  546.                                 interrupts and flash attribute updates depends on the nature
  547.                                 of the Spectrum program being run.
  548.  
  549.                 there might still be rare problems executing certain long,
  550.                 self-modifying z80 instructions located at exactly 32763..32766 in z80
  551.                 memory, because of the 68000 addressing modes used to load instruction
  552.                 operands;
  553.  
  554.                 there is at least one other bug I haven't been able to track down yet.
  555.  
  556.  
  557. o   The emulator allocates and uses two sound channels.  If there are not
  558.     enough free channels, you get the option of running the emulator with no
  559.     sound.  If you have enough memory you can test this by running 3 copies of
  560.     Spectrum at once!
  561.  
  562.  
  563. o   Because it's running slower, maybe now you can get past that "impossible"
  564.     level in your favourite game.
  565.  
  566.  
  567. o   Now you can print Spectrum graphics by transferring to your Amiga.
  568.  
  569.  
  570. o   If you're cross-developing Spectrum software, now you can see which parts
  571.     need speeding up.
  572.  
  573.  
  574. o   I've tested it with several Sinclair Basic programs and all ran perfectly.
  575.  
  576.  
  577. o   I've tried lots machine-code programs and most work ok.  The following
  578.     programs seem to work ok in the emulator:
  579.  
  580.                                 Zeus Assembler and Monitor
  581.                                 Scrabble
  582.                                 Jetset Willy
  583.                                 Atic Atac
  584.                                 Jetpac
  585.                                 Tron
  586.                                 The Train Game
  587.                                 Backgammon
  588.                                 PSSST
  589.                                 Horace and the Spiders
  590.                                 Sam Spade
  591.                                 Draughts
  592.                                 Sam Stoat
  593.                                 3D Deathchase
  594.                                 Technician Ted
  595.                                 Kosmic Kanga
  596.                                 Monty Mole
  597.                                 Talk Chess
  598.                                 Horace Goes Skiing
  599.                                 Hungry Horace
  600.                                 Star Raid
  601.                                 Cyclone
  602.                                 Wheelie
  603.                                 Full Throttle
  604.                                 Mugsy
  605.                                 Dynamite Dan
  606.                                 Dynamite Dan II
  607.                                 Heathrow
  608.                                 IS Chess 48
  609.                                 Matchpoint
  610.                                 Max Headroom                                    no joystick
  611.                                 Spy vs Spy
  612.                                 Kong
  613.                                 The Alchemist
  614.                                 Daley Decathlon
  615.                                 Automania
  616.                                 Penetrator
  617.                                 Gyron
  618.                                 Alien8
  619.                                 Cyberun
  620.                                 KnightLore
  621.                                 Batman
  622.                                 Tomahawk
  623.                                 Fighter Pilot
  624.                                 Athena
  625.                                 Basil the Detective
  626.                                 Pacland
  627.                                 Orbix
  628.                                 Meteor
  629.                                 Manic Miner
  630.                                 Madmix
  631.                                 Kokotoni Wilf
  632.                                 Ikari Warriers
  633.                                 Gauntlet
  634.                                 Dustin
  635.                                 Ant Attack
  636.  
  637.  
  638.                 St Bernard resets the Spectrum at the end of the first level.
  639.  
  640.                 SabreWulf runs, except sometimes the rhino runs backwards (very
  641.                 amusing).
  642.  
  643.                 (If you know why either of these programs don't work, please tell me.)
  644.  
  645.     Note: The Amiga doesn't crash.  If a Spectrum program crashes, you can
  646.                 either:  Quit the emulator and continue working on the Amiga, or:
  647.                 Press F1 and load another snapshot.
  648.  
  649.     Note: Some of the above have not been tested since Spectrum v0.7 or v0.8.
  650.  
  651.     Another note: Some of the above programs won't load from tape, but they
  652.     will run if you can create a snapshot file somehow (e.g, Mirage Microdriver
  653.     and serial port).
  654.  
  655.     One user reported to me that out of 350 games he tried on his A1200, all
  656.     except about 10 or 15 worked properly.  (He was not loading from tape.)
  657.     Other people have sent me long lists of hundreds of games that work okay.
  658.  
  659.  
  660. o   One problem I have had with snapshotting games by transferring a snapshot
  661.     file from the real Spectrum to the amiga, is as follows:  If there is
  662.     non-standard hardware in your real Spectrum (like a non-standard joystick or
  663.     disk drive), and the program knows about the special hardware, then the
  664.     program might have already done a hardware test (before you made the
  665.     snapshot) that makes it believe the special hardware exists permanently.
  666.     Then, when run under the emulator, the program tries to access the
  667.     non-existent hardware and behaves erratically.
  668.  
  669.     What is wrong is that the program was started in one environment (the real
  670.     Spectrum with add-ons) and is now running in another (the plain Spectrum
  671.     emulator).  For example, if your program behaves as if the joystick button
  672.     is continuously pressed (when run in the emulator), maybe it is because
  673.     you made the original snapshot from a Spectrum which has non-standard
  674.     joystick hardware.  See if you can disconnect the joystick interface and
  675.     reload the original program from tape before you make a snapshot.
  676.  
  677.  
  678. o   I am not supplying the source of the emulator yet.
  679.  
  680.  
  681. o   Please report bugs to peterm@maths.grace.cri.nz.  I'd much prefer bug
  682.     reports like "the `or' instruction doesn't zero the carry flag" to
  683.     "Dan Dare doesn't work".
  684.  
  685.  
  686.  
  687. Appendix 1:  The keyboard:
  688.  
  689. The Spectrum has a weird way of mapping functions to keys that doesn't
  690. translate nicely to the Amiga.  To get a "[" on a real Spectrum, for example,
  691. you press CAPS-SHIFT and SYMBOL-SHIFT together followed by SYMBOL-SHIFT and F.
  692. In the emulator, you do the same thing except CAPS-SHIFT is either of the
  693. SHIFT keys and SYMBOL-SHIFT is either of the ALT keys.  Pressing "[" on the
  694. Amiga keyboard won't work.
  695.  
  696. The following table lists the Amiga key(s) corresponding to each Spectrum key:
  697.  
  698.                 Amiga key                       Spectrum key
  699.  
  700.                 0..9                                            0..9
  701.                 keypad 0..9                     0..9
  702.                 A..Z                                            A..Z
  703.                 SPACE                                           SPACE
  704.                 RETURN or ENTER                 ENTER
  705.                 either SHIFT key                CAPS-SHIFT
  706.                 either ALT key                  SYMBOL-SHIFT
  707.  
  708. The following special Amiga keys correspond to Spectrum key combinations.
  709.  
  710.                 Amiga key                       Spectrum key combination
  711.  
  712.                 .                                               SYMBOL-SHIFT/M
  713.                 ,                                               SYMBOL-SHIFT/N
  714.                 ;                                               SYMBOL-SHIFT/O
  715.                 -                                               SYMBOL-SHIFT/J
  716.                 =                                               SYMBOL-SHIFT/L
  717.                 keypad (                        SYMBOL-SHIFT/8
  718.                 keypad )                        SYMBOL-SHIFT/9
  719.                 keypad /                        SYMBOL-SHIFT/V
  720.                 keypad *                        SYMBOL-SHIFT/B
  721.                 keypad -                        SYMBOL-SHIFT/J
  722.                 keypad +                        SYMBOL-SHIFT/K
  723.                 keypad ENTER                    ENTER
  724.                 keypad .                        SYMBOL-SHIFT/M
  725.                 left arrow                      SHIFT/5
  726.                 down arrow                      SHIFT/6
  727.                 up arrow                        SHIFT/7
  728.                 right arrow                     SHIFT/8
  729.  
  730. ESC quits the emulator (unless you cancel the requester that comes up).
  731.  
  732. HELP displays the Spectrum.help file, which is a diagram of the real Spectrum
  733. keyboard.  (You need about 70 kb of CHIP ram free for this.)
  734.  
  735. F1 brings up the load snapshot requester.
  736.  
  737. F2 brings up the save snapshot requester.
  738.  
  739. F3 changes the sampler type for cassette tape loading.
  740.  
  741. All the other Amiga keys do nothing.
  742.  
  743. Note that the Amiga's hardware and software impose some restrictions on the
  744. number of keys that are recognised when several keys are held down at once.
  745. This varies between models of amigas, but don't expect 3 or 4 keys down at
  746. once to behave exactly the same as a Spectrum.
  747.  
  748.  
  749.  
  750. Appendix 2:  Snapshot file format:
  751.  
  752. This format is based on the format used by the Mirage Microdriver "Dump"
  753. command.  Snapshot files are always 49179 bytes long.  Note that in the table,
  754. the byte offset starts from 0, not 1.
  755.  
  756.                 Byte offset into file                           Value
  757.  
  758.                 0                                                               i  register
  759.                 1                                                               l' register
  760.                 2                                                               h' register
  761.                 3                                                               e' register
  762.                 4                                                               d' register
  763.                 5                                                               c' register
  764.                 6                                                               b' register
  765.                 7                                                               f' register
  766.                 8                                                               a' register
  767.                 9                                                               l  register
  768.                 10                                                              h  register
  769.                 11                                                              e  register
  770.                 12                                                              d  register
  771.                 13                                                              c  register
  772.                 14                                                              b  register
  773.                 15                                                              iy low register
  774.                 16                                                              iy high register
  775.                 17                                                              ix low register
  776.                 18                                                              ix high register
  777.                 19                                                              bit 2 is set if interrupts are enabled
  778.                 20                                                              r register
  779.                 21                                                              flags register
  780.                 22                                                              a register
  781.                 23                                                              sp low register
  782.                 24                                                              sp high register
  783.                 25                                                              interrupt mode (0, 1 or 2)
  784.                 26                                                              border colour in low 3 bits
  785.                 27..49178                                       48 kbytes ram dump
  786.  
  787. The JPP Spectrum emulator for 80386-based PC's by Arnt Gulbrandsen uses exactly
  788. the same snapshot format.
  789.  
  790.  
  791. Appendix 3:  Other Spectrum Emulators:
  792.  
  793.  
  794. When I started this project I did not know of any other Spectrum emulators.
  795. Now I have heard of at least 12, including this one, in various stages of
  796. development.
  797.  
  798. 1: This one.
  799.  
  800. 2: The public domain K.G.B. emulator advertised in "Amiga Format".  I have
  801. seen only version 1.2 which does not multitask and does not work properly on
  802. my A3000.
  803.  
  804. 3: An Italian emulator was released (possibly commercially) about 4 years ago
  805. by A.Schifano and Gervasi.  The version I saw was very bug free and worked
  806. on accelerated amigas, but it did not multitask and was slightly slower than
  807. mine.  A believe that an early (buggy) demo version was released on the
  808. coverdisk of an Italian magazine several years ago too.
  809.  
  810. 4: An emulator is under development in Sweden.
  811.  
  812. 5: Another emulator, intended to be commercial, was written in Holland, but it
  813. was never released as far as I know.  From what I have heard about it, it is
  814. much faster than mine.
  815.  
  816. 6: The Whitby Software Spectrum Simulator is a Spectrum ROM rewrite for the
  817. C64.  It runs just fine under TheA64Package and is surprisingly fast.  Because
  818. it is a ROM rewrite and not a z80 emulator, you cannot run z80 machine code
  819. programs (i.e, most games).
  820.  
  821. 7: VGASPEC is a Spectrum emulator for the IBM-PC and clones (not for the
  822. amiga).  A VGA graphics adaptor is required.  I think it was developed in
  823. Spain or Portugal (I don't recognise the language that all the messages are
  824. written in).
  825.  
  826. 8: JPP is another Spectrum emulator for the IBM-PC and clones, developed
  827. recently by Arnt Gulbrandsen.  An 80386 and VGA are required.  It is faster
  828. than VGASPEC.  The name JPP is derived from the keys you press to get LOAD "".
  829.  
  830. 9: There is another very good Spectrum emulator for the IBM-PC.  It is called
  831. Z80, and written by G.A.Lunter, and it includes lots of advanced features.
  832.  
  833. 10: There is a Spectrum emulator for the Atari ST available from various ftp
  834. sites.  Try terminator.cc.umich.edu, perhaps directory /atari/emulators.
  835.  
  836. 11: I heard from one person working on a Spectrum emulator for the BBC RISC
  837. computer (status unknown).
  838.  
  839. 12: I have heard rumours of other emulators in various stages of development
  840. in Australia and Germany for platforms including the Amiga, the IBM-PC and
  841. Unix/X-Windows.
  842.  
  843. There is a good collection of Spectrum emulators available by ftp from
  844. wuarchive.wustl.edu and its mirrors.  Programs to convert between various
  845. snapshot formats are also available there, in source form.  (Look in the
  846. PC Spectrum emulator archives for these.)  Other ftp sites to try are
  847. ftp.nvg.unit.no (run by Arnt Gulbrandsen) and ftp.sun.ac.za (in South Africa).
  848.  
  849. There is also a mailing list for Sinclair-related gossip.  E-mail Mauricio
  850. Tavares at mauricio@gauss.aero.ufl.edu for details.
  851.  
  852.  
  853. Appendix 4:   Update Notes:
  854.  
  855.  
  856. v0.0            22 Oct 1990
  857.  
  858. First release.
  859.  
  860.  
  861. v0.1            15 Nov 1990
  862.  
  863. Sped up display code slightly.  Also sped up main instruction decode slightly.
  864. Display flash attribute as reverse.
  865.  
  866.  
  867. v0.2            30 Dec 1990
  868.  
  869. Now use double buffered display and implemented flash attribute properly.
  870. Added error requesters.
  871. Used pc-relative jump tables in z80 emulator --- slightly faster, and much,
  872. much smaller.
  873.  
  874.  
  875. v0.3            20 Jan 1991
  876.  
  877. Changed display routines to update screen periodically instead of after every
  878. z80 instruction that pokes the Spectrum's display file.  Used the blitter for
  879. this, running in parallel with the z80 emulator.  (Only character rows that
  880. have changed since the last screen update are redrawn.)
  881. Reverted to single buffer display and used blitter to implement flash.  (It's
  882. smaller and faster this way.)
  883. Fixed bug where couldn't use path string in arp file requester.
  884.  
  885.  
  886. v0.4
  887.  
  888. Changed the z80 emulator to use threaded code.  Now all that is executed between
  889. each pair of z80 instructions is "move.w (a3)+,d6; jmp table(pc,d6.w)" instead
  890. of about ten 68000 instructions to decode the next z80 opcode byte.  Overheads
  891. introduced are a new 128 kbyte table giving the routine offset for every byte
  892. in z80 ram, and the necessity to write a zero word into this table every time
  893. the emulator writes to z80 ram.  The overall speed increase is about 20%.
  894. Expanded some subroutines to macros and expanded $dd and $fd prefix
  895. instructions to independent code for a slight speed increase.  A side-effect
  896. is that the executable increased in size from 27k to over 40k.
  897. Introduced some bugs during the systematic changes that are proving hard to
  898. track down.
  899.  
  900.  
  901. v0.5             7 Apr 1991
  902.  
  903. Fixed bug in "sra a" instruction.
  904. Fixed bugs in rotate and shift (ix+d) and (iy+d) instructions.
  905. Fixed bugs where used "offset(a4,rr.w)" to address z80 memory space where offset
  906. is -2, -1, 1 or 2.  (Can't use that mode because of the unlikely event of rr.w
  907. being near $8000.)
  908. Implemented mode 2 interrupts.  Low byte of interrupt vector (normally
  909. provided by an external peripheral device) is assumed to be 0.
  910. Increased the interrupt interval from 2500 instructions to every 5000
  911. instructions, because otherwise some programs with their own (mode 2)
  912. interrupt routines overflowed the stack.
  913.  
  914.  
  915. v0.6            23 Apr 1991
  916.  
  917. Fixed bugs in the following z80 instructions:
  918.                 ld              ixh,b
  919.                 ld              ixh,d
  920.                 rl              (ix+dd)
  921.                 rr              (ix+dd)
  922.                 sla             (ix+dd)
  923.                 cpdr
  924. and iy equivalents of the above instructions.
  925. Implemented ini, outi, ind, outd, inir, otir, indr, otdr.  (Out instructions do
  926.                 nothing).
  927. Now preserve (otherwise) unused flag bits in push af, pop af and ex af,af'
  928.                 (instead of setting them all to 0).
  929. Changed layout of vector table for threaded code (origin now in middle).
  930. Fixed bug in vector table wraparound code (when pc incremented from 32767 to
  931.                 32768).
  932. Sped up ram writes by optimising macro for writing a byte to ram.
  933. Added processor type check.  Now you get a requester when you try to run the
  934.                 wrong version for your processor type, instead of "Software Error,
  935.                 Task Held".
  936. Implemented sound by opening audio.device and trapping calls to the "beeper"
  937. subroutine at $03b5 in Spectrum ROM.
  938.  
  939.  
  940. v0.7
  941.  
  942. Optimised blits to update flash attributes by keeping track of which parts of
  943. the display are flashing and updating only those parts.  That saves a lot of
  944. blits.  No blits are needed at all when there are no flashing characters
  945. displayed.  It used to redraw the entire display for every blink.
  946.  
  947.  
  948. v0.8            13 May 1991
  949.  
  950. Further optimised the display routines by adding a 6144-byte lookup table.
  951.  
  952.  
  953. v0.9            22 Jul 1991
  954.  
  955. Lower task priority to -5 at startup.  This is friendlier to other tasks
  956. because Spectrum is highly CPU intensive.  If Spectrum is running at a higher
  957. priority than another task, then that other task is completely blocked.
  958. Sped up the emulator by 5% by checking for interrupts only after branch, jump,
  959. call and return instructions, instead of after all instructions.
  960. Open gameport.device and emulate Kempston joystick (at Z80 "in" instruction
  961. level) using the rear Amiga gameport.
  962.  
  963.  
  964. v0.9b           1 Sep 1991
  965.  
  966. Implemented all the undocumented z80 sls instructions.
  967. Fixed bug in ld (nn),sp instruction.  (It didn't work at all!)
  968. Implemented the z80 n flag --- all instructions now set/reset the n flag.
  969. Fixed bugs in inc/dec (hl), inc/dec (ix+dd) & inc/dec (iy+dd) (never set v).
  970. The daa instruction now works correctly after add and sub (not just adc & sbc).
  971. Incorporated Kristian Nielson's tape load routine.
  972. Allocate/free misc.resource.
  973. Added "File already exists! Overwrite?" requester (in save snapshot).
  974. Fixed keypad 0 key.
  975. Rationalised keyboard.  Arrow keys are now equivalent to SHIFT+5/6/7/8 instead
  976. of 5/6/7/8 (without the SHIFT).
  977. ESC key quits.
  978. The halt instruction now calls WaitTOF().  (Was too fast.)  The Spectrum Basic
  979. PAUSE function now works correctly.
  980. Added a separate timer task to prevent interrupts occurring too quickly.  The
  981. "flash" rate and keyboard interrupt rates are now more constant.
  982. The HELP key now displays Spectrum.help IFF/ILBM file from current directory.
  983. Reorganised register usage in z80 emulator to try to speed it up (lots of work
  984. but not much success).
  985.  
  986.  
  987. v1.0            9 Nov 1991
  988.  
  989. Implemented menus.
  990. Added noise correction code to cassette tape loader.
  991. Added support for 2 kinds of sound samplers.
  992. Screen to front after error requester in IFF loader.
  993. Use an interrupt server instead of extra task for timer.
  994. Further optimised blitter routines.
  995. Put z80 parity byte in a register (slight speedup).
  996. Implemented ld-bytes and sa-bytes to/from disk.
  997.  
  998.  
  999. v1.1            Dec 1991
  1000.  
  1001. Created 68020 version (uses 68020/30/40-only addressing modes for extra speed)
  1002. Moved z80 address space to FAST RAM with a copy of 16384..22527 in CHIP RAM
  1003. (instead of having the whole Z80 address space in CHIP RAM).
  1004. Added more undocumented z80 instructions.
  1005. Sped up display routines by changing update algorithm.  Animated graphics and
  1006. scrolling are now faster by a factor of 2 or 3.
  1007.  
  1008.  
  1009. v1.2            7 Jan 1992
  1010.  
  1011. Rewrote joystick handling routines to avoid continuous polling.
  1012.  
  1013.  
  1014. v1.3            Feb 1992
  1015.  
  1016. Implemented a much faster algorithm for handling z80 prefix instructions that
  1017. was suggested to me by Richard Carlsson.
  1018. Preserve high bit of R register between LD R,A and LD A,R, and also in snapshot
  1019. files.  Tomahawk works now.
  1020. GetCC() is now documented to preserve d0/d1/a0/a1.  Fixed movesr macro.
  1021. Mode 2 interrupts assume $ff is on the external bus, not $00.  This change
  1022. fixed quite a few games.
  1023. Fixed glaring bug in "set 4,l" instruction.  Sabre Wulf, Fighter Pilot, Basil
  1024. the Detective, Athena and lots of other programs work now.
  1025. Changed implementation of daa instruction to speed up add/adc/sub/sbc instrs.
  1026. Use blitter to do comparisons as well as copies in display updater.
  1027. Sped up CPU computation of blitter attribute masks in display updater.
  1028. Display updater now translates black to bright black on the fly.  This leaves a
  1029. colour register free for the border colour (one day).
  1030. Fixed bug in display updater that caused flashing to fail sometimes.
  1031.  
  1032.  
  1033. v1.4            17 Mar 1992
  1034.  
  1035. Changed ld-bytes ROM patch entry point from $0556 to $056b to be compatible
  1036. with more programs.
  1037.  
  1038.  
  1039. v1.4a           22 Mar 1992
  1040.  
  1041. Sped up LDIR by calling CopyMem().  This nearly doubled the speed of some
  1042. programs (e.g, ManicMiner and JetsetWilly).
  1043. Increased the interrupt rate and screen refresh rate when executing lots of
  1044. large LDIRs.
  1045.  
  1046.  
  1047. v1.5            27 Dec 1992 (This version later abandoned)
  1048.  
  1049. Major revamp of z80 emulator, as suggested by several correspondents (3 days'
  1050. work).
  1051. Implemented conventional decoding scheme for z80 instructions, and did away
  1052. with threaded code tables and the overhead of updating them on every write.
  1053. 68000 and 68010 versions now use 2-instruction decode (self-modifying) as
  1054. follows:
  1055.                 move.b          (a3)+,1$+2-base(a5)             ; get opcode and modify next instr
  1056. 1$:             jmp             $ff00(a5)                       ; jump directly to next instruction
  1057. 68020/30/40 version uses a slightly longer macro to avoid self-modifying code.
  1058. Instruction routines are all exactly 256 bytes in size and the total size of
  1059. all 256 routines is 64 kbytes.
  1060. Added about 5 more such 64 kb blocks of code for prefixed instructions.
  1061. Managed to interleave all the 64 kb code blocks so that they effectively
  1062. reduced to a single 64 kb code block (even sharing the same base address
  1063. register but each table having a different byte-offset).
  1064. About 25 instruction routines didn't fit in their allocated space and
  1065. required long jumps to routines elsewhere.
  1066. Several features broke, including ROM write-protection, invisible ROM-hooks
  1067. for load/save/beep, (in fact I did not re-implement ROM hooks, so loading,
  1068. saving and sound did not work at all), daa mechanism, fast prefix mechanism,
  1069. potential to treat common sequences of instructions as a single instruction
  1070. with no overhead, etc.
  1071. Speed was almost exactly the same as v1.4a (which still had the broken features
  1072. intact), and there seemed to be no significant advantages.
  1073.  
  1074.  
  1075. v1.6            25 Jan 1993
  1076.  
  1077. Gave up on conventional decoding and reverted to v1.4a sources.
  1078. Implemented border colour (at last!)  Made window borderless and changed
  1079. colours.
  1080. The old "filler" byte in the snapshot file format now holds the border colour.
  1081. Added "Reset" menu item.
  1082. Changed sa-bytes ROM patch entry point from $04c2 to $04c6 to be compatible
  1083. with more programs.
  1084. The ld-bytes and sa-bytes routines were not always setting the de, ix and flag
  1085. registers on return, causing some tape-copying programs to fail.  Corrected
  1086. the problem.
  1087. File-names longer than 10 characters passed to the SAVE command could crash
  1088. the amiga.  Corrected the problem.
  1089. Added support for Rombo sound sampler (the one that comes with MegaMIX
  1090. Master).  I do not own a Rombo sound sampler and I have been unable to test
  1091. this option.  (I used information provided by a correspondent in Portugal,
  1092. who also informed me that v1.4a did not work with his Rombo sampler.)
  1093. Implemented sound at the z80 port 254, bit 4, level.
  1094. Changed keyboard handling code to precalculate the most common z80 port address
  1095. values whenever a key is pressed or released, instead of doing a full
  1096. calculation every time an "in" instruction is executed.
  1097.  
  1098.  
  1099. v1.7            7 Jun 1993
  1100.  
  1101. Sped up OUT instructions.  (Sound is noticeably higher pitched.)
  1102. Fixed bug where key-up event was lost after SAVE-ing to disk.
  1103. Applied dozens of small code optimisations suggested by Mark Knibbs, mainly
  1104. in the Z80 emulator and in the display routines.
  1105. Input from IO port 255 (or any other port than the standard ones) now
  1106. sometimes returns 0 or a video attribute from the current display,
  1107. to better emulate a real Spectrum.  It used to always return 255.
  1108. Fixed bug which caused emulator task to go into an unbreakable loop when
  1109. certain multi-byte instructions crossed the 32767/32768 address boundary.
  1110. Use ASL file-requester if available (requires OS 2.x and up for this).
  1111. Moved requesters to custom screen.
  1112. Added menu options to switch the titlebar on and off, set the task priority
  1113. and control the sound volume.
  1114. Enabled "Save to Audio", even though it doesn't seem to work properly.
  1115. Window is now a title-less backdrop window that is the width of the screen.
  1116. The close-box feature has gone.  Use menus or ESC to quit instead.
  1117. Load snapshot from CLI command-line or project icon.
  1118. Distribute Spectrum.rom with emulator.
  1119.